package dto

import (
	"github.com/gin-gonic/gin"
	"rock/customer/public"
)

type PreMsg struct {
	IsCustomerClient int `json:"isCustomerClient" form:"isCustomerClient"  example:"1"` //是否客户端 1 是 0 否
}

type Common struct {
	PreMsg
	Id string `json:"id" form:"id"` //id
}

func (params *Common) BindingParams(c *gin.Context) error {
	return public.DefaultGetValidParams(c, params)
}

type MsgConfirm struct {
	PreMsg
	Id      int    `json:"id" form:"id" `           //消息id
	MsgUid  string `json:"msgUid" form:"msgUid" `   //融云消息id，唯一
	Extra   string `json:"extra" form:"extra" `     //额外消息，接入时为 要接入的群id
	UserId  int    `json:"userId" form:"userId" `   //用户id
	Confirm int    `json:"confirm" form:"confirm" ` //1 接受转接，2 拒绝转接，3 接受邀请，4 拒绝邀请
}

func (params *MsgConfirm) BindingParams(c *gin.Context) error {
	return public.DefaultGetValidParams(c, params)
}

type MsgList struct {
	PreMsg
	FromUserID string `json:"fromUserId" form:"fromUserId" ` //发送用户 Id
	ToUserID   string `json:"toUserId" form:"toUserId" `     //目标 Id
	MsgUidList []Msg  `json:"msgList" form:"msgList" `       //消息数组
}

func (params *MsgList) BindingParams(c *gin.Context) error {
	return public.DefaultGetValidParams(c, params)
}

type ChatMessage struct {
	PreMsg
	FromUserID    string `json:"fromUserId" form:"fromUserId" `      // 发送用户 Id
	ToUserID      string `json:"toUserId" form:"toUserId" `          // 目标 Id
	ObjectName    string `json:"objectName" form:"objectName" `      // 消息类型 文本消息 RC:TxtMsg 、 图片消息 RC:ImgMsg 、语音消息 RC:VcMsg 、图文消息 RC:ImgTextMsg 、位置消息 RC:LBSMsg 、添加联系人消息 RC:ContactNtf 、提示条通知消息 RC:InfoNtf 、资料通知消息 RC:ProfileNtf 、通用命令通知消息 RC:CmdNtf
	Content       string `json:"content" form:"content"`             // 消息类型
	ChannelType   string `json:"channelType" form:"channelType"`     // 会话类型
	MsgTimestamp  string `json:"msgTimestamp" form:"msgTimestamp"`   // 服务端收到客户端发送消息时的服务器时间（1970年到现在的毫秒数）
	MsgUId        string `json:"msgUID" form:"msgUID"`               // 可通过 msgUID 确定消息唯一
	SensitiveType int    `json:"sensitiveType" form:"sensitiveType"` // 消息中是否含有敏感信息，0 为不包含，1 为含有屏蔽敏感词，2 为含有替换敏感词
	Source        string `json:"source" form:"source"`               // 标识消息的发送源头
}

func (params *ChatMessage) BindingParams(c *gin.Context) error {
	return public.DefaultGetValidParams(c, params)
}

type Group struct {
	PreMsg
	Id                 int    `json:"id" form:"id"  example:"12" `                        //群 Id
	GroupId            string `json:"groupId" form:"groupId"  example:"813459474223104" ` //群 Id
	GroupName          string `json:"groupName" form:"groupName"  example:"test_group" `  //群组 Id 对应的名称
	UserId             string `json:"userId" form:"userId"  example:"1"`                  //私聊的用户 Id
	OtherUserId        string `json:"otherUserId" form:"otherUserId"  example:"2" `       //私聊的加入用户 Id
	State              int    `json:"state" form:"state"  example:"2"`                    //0初始状态,1进行中,2完成
	Msg                string `json:"msg" form:"msg"  example:"abc"`                      //消息内容
	MsgType            int    `json:"msgType" form:"msgType"  example:"12" `
	MsgUid             string `json:"msgUid" form:"msgUid"  example:"message" `     //
	Extra              string `json:"extra" form:"extra"  example:"message" `       //额外的信息
	QuitType           int    `json:"quitType" form:"quitType"  example:"12" `      //退出群聊方式 1 自己退出；2 被人踢出；3 管理结束会话
	IsBrowseCurrentMsg int    `json:"isBrowseCurrentMsg" form:"isBrowseCurrentMsg"` //是否查看历史消息（0 否；1 是；）
}

func (params *Group) BindingParams(c *gin.Context) error {
	return public.DefaultGetValidParams(c, params)
}

type Groups struct {
	PreMsg
	GroupId      string         `json:"groupId" form:"groupId"  example:"813459474223104" `                  //群组ID
	GroupName    string         `json:"groupName" form:"groupName"  example:"XXX"`                           //群名称
	GroupMembers []GroupMembers `json:"groupMembers" form:"groupMembers" validate:"required,min=1,max=1000"` //群成员
	UserId       int            `json:"userId" form:"userId"  example:"123" `                                //当前用户id
}

func (params *Groups) BindingParams(c *gin.Context) error {
	return public.DefaultGetValidParams(c, params)
}

type Robot struct {
	PreMsg
	Id                int    `json:"id" form:"id" example:"1"`
	RobotCode         string `json:"robotCode" form:"robotCode"  example:"XX"`                 //机器人编码
	RobotImg          string `json:"robotImg" form:"robotImg"  example:"XX" `                  //机器人头像
	RobotNickname     string `json:"robotNickname" form:"robotNickname"  example:"XX" `        //机器人昵称
	WelcomeFlag       int    `json:"welcomeFlag" form:"welcomeFlag"  example:"1" `             //欢迎语开关
	WelcomeText       string `json:"welcomeText" form:"welcomeText"  example:"XX" `            //欢迎语
	AnswerFlag        int    `json:"answerFlag" form:"answerFlag"  example:"1" `               //应答标题开关
	AnswerTitle       string `json:"answerTitle" form:"answerTitle"  example:"XX" `            //应答标题
	AnswerText        string `json:"answerText" form:"answerText"  example:"XX" `              //应答文本
	KeywordAutoAnswer int    `json:"keywordAutoAnswer" form:"keywordAutoAnswer"  example:"1" ` //关键词回答
	KeywordAutoLink   int    `json:"keywordAutoLink" form:"keywordAutoLink"  example:"1" `     //关键词链接
}

func (params *Robot) BindingParams(c *gin.Context) error {
	return public.DefaultGetValidParams(c, params)
}

type RongCloudTokenInput struct {
	PreMsg
	UserId      string `json:"userId" form:"userId"  example:"123" comment:"用户Id，应用内唯一标识"`                               //用户 Id，应用内唯一标识
	Name        string `json:"name" form:"name" example:"rock" comment:"用户名称，最大长度 128 字节"`                               //用户名称，最大长度 128 字节。用来在 Push 推送时显示用户的名称，重新获取 Token 传入新的名称后，将覆盖之前的用户名称
	PortraitUri string `json:"portraitUri" form:"portraitUri" example:"http://xxx.png" comment:"用户头像 URI，最大长度 1024 字节。"` //用户头像 URI，最大长度 1024 字节。
}

func (params *RongCloudTokenInput) BindingParams(c *gin.Context) error {
	return public.DefaultGetValidParams(c, params)
}

type WeChatLogin struct {
	PreMsg
	JsCode string `json:"jsCode" validate:"required" example:"" comment:""`             //微信校验code
	Type   *int   `json:"type" validate:"required" example:"1" comment:"1表示FAE 2表示客户端"` // 1表示FAE 2表示客户端
}

func (params *WeChatLogin) BindingParams(c *gin.Context) error {
	return public.DefaultGetValidParams(c, params)
}

type GetWechatMobileInput struct {
	PreMsg
	Sessionkey    string `json:"sessionkey" form:"sessionkey" validate:"required" example:"4asJ2OK6SI2ceDGG5nfvYA=="`                                                                                                                                                                                                       //校验串
	EncryptedData string `json:"encryptedData" form:"encryptedData" validate:"required" example:"l5Uq+OlihSh3aat59UGz3lqO47CaaeZCvmr9eWYNpvOjLlGF3Nw+hlYUuzQqWVJ8+EWCoMC7DogVZ6qvRCgVM8GCyqgTaXbzP+364KarO3aYiexb1AU08VYqS5vmWKH/E0H6flKxGb/liq4P8jINOS1C0klEByf+lIOpWqZKitY6QHA6LuVHQGX165GscCb1wqmjrtRr4eswTDbNYVBPWw=="` //校验串
	Iv            string `json:"iv" form:"iv" validate:"required" example:"vyrqxLUnKfoGPlISwtp9hQ=="`                                                                                                                                                                                                                       //校验串
}

func (params *GetWechatMobileInput) BindingParams(c *gin.Context) error {
	return public.DefaultGetValidParams(c, params)
}

type User struct {
	PreMsg
	Base
	//Id          int    `json:"id" form:"id"  example:"1"`                         //用户 Id
	MessageUId  string `json:"messageUId" form:"messageUId"  example:"1"`         //用户 Id
	UserId      string `json:"userId" form:"userId"  example:"1"`                 //用户 Id
	OpenId      string `json:"wechat_openid" form:"wechat_openid"  example:"XXX"` //用户 openid
	UnionId     string `json:"unionId" form:"unionId"  example:"XXX"`             //用户 unionid 微信平台返回
	IsOnline    int    `json:"is_online" form:"is_online"  example:"0"`           //是否在线（0 不在线（离线）；1 在线；2 忙碌；）
	GroupId     string `json:"groupId" form:"groupId"  example:"" `               //群 Id
	ChannelType int    `json:"channelType" form:"channelType"  example:"1"`       //属于哪个渠道：1 pc；2 小程序；
	AccessType  int    `json:"accessType" form:"accessType"  example:"1"`         //接入模式：0 无；1 转发；2 转接；
}

func (params *User) BindingParams(c *gin.Context) error {
	return public.DefaultGetValidParams(c, params)
}

type UserInfo struct {
	PreMsg
	UserId    string `json:"userId" form:"userId"  example:"1"`                 //用户 Id
	Avatar    string `json:"avatar" form:"avatar"  example:"http://img.png"`    //头像
	RealName  string `json:"realName" form:"realName"  example:"XXX"`           //真实姓名
	Name      string `json:"name" form:"name"  example:"XXX"`                   //昵称
	Mobile    string `json:"mobile" form:"mobile"  example:"18687656767"`       //头像
	Tel       string `json:"tel" form:"tel"  example:"18687656767"`             //头像
	Email     string `json:"email" form:"email"  example:"18687656767@163.com"` //邮箱
	Company   string `json:"company" form:"company"  example:"XXX"`             //公司
	Job       string `json:"job" form:"job"  example:"ios"`                     //职位
	Remark    string `json:"remark" form:"remark"  example:"ios"`               //备注信息
	WorkYear  int    `json:"workYear" form:"workYear"  example:"2"`             //工作年限
	Introduce string `json:"introduce" form:"introduce" example:"XXX"`          //介绍
	GoodAt    string `json:"goodAt" form:"goodAt" example:"XXX"`                //擅长
	Address   string `json:"address" form:"address" example:"XXX"`              //收货地址
}

func (params *UserInfo) BindingParams(c *gin.Context) error {
	return public.DefaultGetValidParams(c, params)
}
